package com.greensam.pixelengine.facade;

import com.greensam.pixelengine.api.aliyunai.model.CreateOutPaintingTaskResponse;
import com.greensam.pixelengine.api.aliyunai.model.GetOutPaintingTaskResponse;
import com.greensam.pixelengine.api.imagesearch.model.ImageSearchResult;
import com.greensam.pixelengine.pojo.base.DeleteRequest;
import com.greensam.pixelengine.pojo.base.PaginationResponse;
import com.greensam.pixelengine.pojo.vo.picture.request.*;
import com.greensam.pixelengine.pojo.vo.picture.response.PictureVo;

import java.util.List;

/**
 * 图片门面服务
 *
 * @author Macro_Ray
 * @since 2025/7/2 13:39
 */
public interface PictureFacadeService {

    /**
     * 主页 - 分页查询
     *
     * @param request 请求
     * @author Ma Chengrui
     * @since 2025/7/3
     */
    PaginationResponse<PictureVo> pagePicture(PicturePageRequest request, Long userId);

    /**
     * 主页 - 分页查询缓存
     * todo - 缓存接口没有做权限校验
     *
     * @param request 请求
     * @author Ma Chengrui
     * @since 2025/7/3
     */
    PaginationResponse<PictureVo> pagePictureWithCache(PicturePageRequest request);

    /**
     * 获取图片
     *
     * @param id 图片id
     * @author Ma Chengrui
     * @since 2025/10/31
     */
    PictureVo getPictureById(Long id);

    /**
     * 主页 - 获取图片详情信息
     *
     * @param id 图片id
     * @author Ma Chengrui
     * @since 2025/7/3
     */
    PictureVo getPictureDetail(Long id, Long userId);

    /**
     * 主页 - 以图搜图
     *
     * @param request 请求参数
     * @author Ma Chengrui
     * @since 2025/9/17
     */
    List<ImageSearchResult> searchPictureByPicture(SearchPictureByPictureRequest request);

    /**
     * 主页 - 颜色搜图
     *
     * @param request 请求参数
     * @param userId  用户id
     * @author Ma Chengrui
     * @since 2025/9/17
     */
    List<PictureVo> searchPictureByColor(SearchPictureByColorRequest request, Long userId);

    /**
     * 图片管理 - 上传图片
     *
     * @param inputSource 文件输入源
     * @param request     请求
     * @param userId      用户id
     * @author Macro_Ray
     * @since 2025/7/2
     */
    PictureVo uploadPicture(Object inputSource, PictureUploadRequest request, Long userId, String userName);

    /**
     * 图片管理 - 通过url批量上传图片
     *
     * @param request 批量上传请求
     * @param userId  用户ID
     * @author Ma Chengrui
     * @since 2025/7/21
     */
    Integer batchUploadPicture(PictureBatchUploadRequest request, Long userId, String userName);

    /**
     * 图片管理 - 删除图片
     *
     * @param request 请求
     * @param userId  用户id
     * @author Ma Chengrui
     * @since 2025/7/2
     */
    Boolean deletePicture(DeleteRequest request, Long userId);

    /**
     * 图片管理 - 更新图片
     *
     * @param request 请求
     * @param userId  用户id
     * @author Ma Chengrui
     * @since 2025/7/2
     */
    Boolean updatePicture(PictureUpdateRequest request, Long userId);

    /**
     * 图片管理 - 编辑图片
     *
     * @param request 请求
     * @param userId  用户id
     * @author Ma Chengrui
     * @since 2025/7/2
     */
    Boolean editPicture(PictureEditRequest request, Long userId);

    /**
     * 图片管理 - 分页查询
     *
     * @param request 请求
     * @author Ma Chengrui
     * @since 2025/7/3
     */
    PaginationResponse<PictureVo> pageManagerPicture(PictureManagerPageRequest request);

    /**
     * 图片管理 - 审核图片
     *
     * @param request 请求
     * @param userId  用户id
     * @author Ma Chengrui
     * @since 2025/7/18
     */
    Boolean reviewPicture(PictureReviewRequest request, Long userId);

    /**
     * 创建AI扩图任务
     *
     * @param request 创建扩图任务请求
     * @author Ma Chengrui
     * @since 2025/9/17
     */
    CreateOutPaintingTaskResponse createPictureOutPaintingTask(CreatePictureOutPaintingTaskRequest request, Long userId);

    /**
     * 获取AI扩图任务详情
     *
     * @param taskId 任务id
     * @author Ma Chengrui
     * @since 2025/9/17
     */
    GetOutPaintingTaskResponse getPictureOutPaintingTask(String taskId);
}
